.. _应用案例: ************************************ 应用案例 ************************************ 本章将介绍DS-PAW的各种应用实例,具体包括:如何计算磁矩、如何计算反铁磁材料等;用户通过以下应用教程,将可以更深入了解DS-PAW软件的使用。 .. _2.1 氧原子的磁矩计算: 2.1 氧原子的磁矩计算 ========================================================================== ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本节中我们将以单个氧原子体系为例子来介绍磁性体系的计算。 .. _ 2.1.1 氧原子自洽计算: 2.1.1 氧原子自洽计算 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 由于本次计算的是单个氧原子的磁矩,因此并不需要进行结构弛豫计算,我们直接从自洽计算开始,准备参数文件 ``scf.in`` 和结构文件 ``structure.as`` , ``scf.in`` 如下: .. code-block:: python task = scf sys.symmetry = false sys.structure = structure.as sys.spin = collinear cal.smearing = 1 cal.sigma = 0.01 cal.kpoints = [1, 1, 1] 本次计算的输入文件中以下几个参数需要重点关注下: - ``sys.symmetry`` :本次计算中我们将在关闭对称性的情况下进行计算,因为在DS-PAW中可以通过对称性来减少程序的计算量,但是往往通过对称性优化之后,一些较为细节的东西将会不是特别准确,因此本次计算中将关闭对称性; - ``sys.spin`` :指定体系磁性,因为我们知道单个氧原子的磁矩是 **2μB** ,这里我们将设置体系的磁性为 **collinear** 也就是 **共线自旋** ; - ``cal.kpoints`` :在前面的章节中我们介绍过对于没有周期性的维度, **K点** 可以设置为1; :guilabel:`structure.as` 文件参考如下: .. code:: python Total number of atoms 1 Lattice 7.50000000 0.00000000 0.00000000 0.00000000 8.00000000 0.00000000 0.00000000 0.00000000 8.90000000 Cartesian O 0.00000000 0.00000000 0.00000000 结构文件中我们使用笛卡尔坐标,因此我们设置第七行中坐标类型为 ``Cartesian`` ;为了在结构也尽量的减少对称性,手动晶格改为 **[7.5,8,8.9]** 格子。 .. _ 2.1.2 程序运行: 2.1.2 程序运行 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 准备好输入文件之后,将 ``scf.in`` 和 ``structure.as`` 文件上传到安装了DS-PAW的环境上,运行 :guilabel:`DS-PAW scf.in` 命令。 .. _ 2.1.3 计算结果分析: 2.1.3 计算结果分析 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 根据上述的输入文件,计算完成之后将会得到 ``DS-PAW.log`` 、 ``system.json`` 这2个文件。 使用文本编辑器或者在线显示 **json** 格式的网页中打开 ``system.json`` 文件,具体数据如下: .. figure:: images/2-1.png 在 ``system.json`` 中找到 **Occupation** ,可以看到 :guilabel:`Spin1` 下0,1,2,3个轨道电子的占据为 **1** , :guilabel:`Spin2` 下只有0,1两个轨道下电子的占据数为 **1** , 所以我们可以得到整个体系带有两个 **2μB** 的磁矩。 .. _2.2 NiO体系的反铁磁计算: 2.2 NiO体系的反铁磁计算 ========================================================================== ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 本节中我们将以NiO体系为例子介绍如何设置计算反铁磁计算。 .. _ 2.2.1 NiO体系自洽计算: 2.2.1 NiO体系自洽计算 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 本次案例中同样省去了结构弛豫这个过程,用户重现此案例时,可以自行尝试下进行结构弛豫计算,准备参数文件 ``scf.in`` 和结构文件 ``structure.as`` , ``scf.in`` 如下: .. code-block:: python task = scf sys.structure = structure.as sys.spin = collinear cal.smearing = 4 cal.kpoints = [8, 8, 8] cal.cutoff = 400 本次计算的输入文件中以下几个参数需要重点关注下: - ``cal.smearing`` :本次计算中采用 **四面体加布洛赫** 的方法,当使用该方法时 :guilabel:`sigma` 将强制被设置为 **0** ; - ``sys.spin`` :指定体系磁性, **NiO** 为反铁磁材料因此我们需要设置磁性为 :guilabel:`collinear` 也就是 **共线自旋** ; - ``cal.cutoff`` :这里我们设置计算中平面波的截断为 **400** ; ``structure.as`` 文件参考如下: .. code-block:: python Total number of atoms 4 Lattice 4.16840000 2.08420000 2.08420000 2.08420000 4.16840000 2.08420000 2.08420000 2.08420000 4.16840000 Cartesian Mag Ni 1.04210000 1.04210000 1.04210000 2.0 Ni 5.21050000 5.21050000 5.21050000 -2.0 O 3.12630000 3.12630000 3.12630000 0 O 7.29470000 7.29470000 7.29470000 0 可以注意到,在结构文件的第七行的 ``Cartesian`` 后面加入 **Mag** 标签,设置了这个标签之后就可以设置每个原子的磁矩了,由于我们需要体现反铁磁(整个体系不显示磁矩,单个原子有磁矩),我们建立了四个原子的晶胞,一个Ni原子设置磁矩为 **-2** ,另一个Ni原子设置磁矩为 **2** ,两个O原子设置磁矩为 **0** 。 .. _ 2.2.2 程序运行: 2.2.2 程序运行 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 准备好输入文件之后,将 ``scf.in`` 和 ``structure.as`` 文件上传到安装了DS-PAW的环境上,运行 :guilabel:`DS-PAW scf.in` 命令。 .. _ 2.2.3 自洽计算结果分析: 2.2.3 自洽计算结果分析 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 根据上述的输入文件,计算完成之后将会得到 ``DS-PAW.log`` 、 ``system.json`` 这2个文件。 使用文本编辑器或者在线显示 **json** 格式的网页中打开 ``system.json`` 文件,在 ``system.json`` 中找到 **magnetization** ,可以看到自洽完成之后总的磁矩为 **1e-08** ,几乎为0。 .. _ 2.2.4 NiO体系态密度计算: 2.2.4 NiO体系态密度计算 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 之后准备进行态密度计算,准备参数文件 ``pdos.in`` 结构文件 ``structure.as`` 和自洽的二进制电荷密度文件 ``rho.bin`` ,此时 **pdos.in** 如下: .. code-block:: python task = dos sys.structure = structure.as sys.spin = collinear cal.iniCharge = ./rho.bin cal.smearing = 4 cal.kpoints = [16, 16, 16] cal.cutoff = 400 dos.project = true 本次计算中我们打开了态密度的投影。 .. _ 2.2.5 程序运行: 2.2.5 程序运行 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 将新建的 ``pdos.in`` 文件上传 **NiO** 的自洽文件夹上,运行 :guilabel:`DS-PAW pdos.in` 命令。 .. _ 2.2.6 态密度计算结果分析: 2.2.6 态密度计算结果分析 ------------------------------------------------------ ------------------------------------------------------------------------------------------------------------ 根据上述的输入文件,计算完成之后将会得到DS-PAW.log、dos.json这2个文件。使用python对dos.json进行数据处理画出NiO的t2g和eg轨道,具体操作如下: (1) 我们在计算目录中新建一个 **dosplot_t2g_eg.py** 文件,内容如下: .. code-block:: python :linenos: from pymatgen.electronic_structure.plotter import DosPlotter from dspawpy.io import get_dos_data dos_data = get_dos_data("./dos.json") dos_plotter = DosPlotter(stack=False,zero_at_efermi=True) dos_plotter.add_dos_dict(dos_data.get_site_t2g_eg_resolved_dos(dos_data.structure[1])) dos_plotter.save_plot("dos_t2g_eg.png",img_format="png") dos_plotter.show() - 第1,2行为需要导入的 **python** 库函数,这里用到了pymatgen中的 **DosPlotter** 库,以及我们自己写的 ``dspawpy.io`` 中的 :guilabel:`get_dos_data` 函数; - 第4行为读取 ``dos.json`` 文件构造 ``dos_data`` 结构体; - 第5行为调用DosPlotter处理dos_data数据,括号中 **stack=False** 表示态密度作图方式为曲线, **stack=True** 表示作图方式为面积, :guilabel:`zero_at_efermi` 控制是否将零点设为 **费米能级** ; - 第6行使用 :guilabel:`add_dos_dict` 获取 **投影信息** ,对dos_data进行 :guilabel:`get_site_t2g_eg_resolved_dos` 操作,获得 **投影到轨道** 的信息; - 第7行为保存图片的名称和格式,这里将数据保存为png格式命名为 **dos_t2g_eg.png** ; - 第8行为显示图片,如果用户运行的环境无法直接显示图片,用户可以将第七行注释了,之后打开 **dos_t2g_eg.png** 文件查看。 (2) 执行 :Guilabel:`python dosplot_t2g_eg.py` ; (3) 生成 ``dos_t2g_eg.png`` 文件 .. figure:: images/2-2.png